#include <iostream>
using namespace std;

//包含纯虚函数的类不能实例化对象

//抽象类
class Car
{
public:
    virtual void Drive() = 0;//纯虚函数
};

//抽象类间接强制了子类重写虚函数，因为不重写的话，子类依旧是抽象类，不能实例化对象
class Benz : public Car
{
public:
    virtual void Drive()
    {
        cout << "舒适" << endl;
    }
};

class PMW : public Car
{
public:
    virtual void Drive()
    {
        cout << "安全" << endl;
    }
    void fun()
    {
        cout << '2' << endl;
    }
};

void func(Car& p)
{
    p.Drive();
}

typedef void (*ptrq)();

void printVFT(ptrq* vtf)
{
    for(int i = 0; i < 1; i++)
    {
        printf("[%d]:%p->",i,vtf[i]);
        ptrq f = vtf[i];
        f();
    }
}

int main()
{
    // Car *p = new Benz;
    // p->Drive();
    Benz b;
    // PMW p;
    // func(b);
    // func(p);
    Benz* pf = &b; 
    printVFT((ptrq*)(*((int*)&b)));
    return 0;
}

